/*-------------------<-- Start of Description-->---------------------\ | Count the total number of observations; | |---------------------<-- End of Description-->----------------------| |--------------------------------------------------------------------| |------------<-- Start of Files or Arguments Needed-->---------------| | 1st argument: indata = or data = or just a data name; | | 2nd argument: return=T / Output - return the number of | | observations as an integer; | | return=F / LOG - write the number of observations | | to the log window; | | return= / Both - return the number and write to | | the log window; | |---------------<-- End of Files Arguments Needed-->-----------------| |--------------------------------------------------------------------| |------------------<-- Start of Files Created-->---------------------| | example: %nobs(one, return=log);/%nobs(one, return=F); | | %nobs(indata=one, return=output); / | | %nobs(indata=one, return=T); | | %nobs(data=two);/%nobs(two);/%nobs(one, return=both); | \-------------------<-- End of Files Created-->---------------------*/ %macro nobs/parmbuff; /*--------------------------------------------\ | Copy Right: Duo Zhou; | | Created: 2-27-2001 11:23pm; | | Purpose: Count the number of observations in| | a dataset; | \--------------------------------------------*/ %local _nobsdataname_ _nobsnobs_ return data indata; %if (%index(%quote(%upcase(%sysfunc(compress(%quote(&syspbuff))))),RETURN=)) %then %do; %let return=%qscan(&syspbuff,2,%str(,())); %let return=%qscan(&return,2,%str(=)); %end; %else %if (%index(%quote(%upcase(%sysfunc(compress(%quote(&syspbuff))))),%str(LOG=))) or (%index(%quote(%upcase(%sysfunc(compress(%quote(&syspbuff))))),%str(OUTPUT=))) %then %do;%end; %else %let return=OUTPUT; %let _nobsdataname_=%qscan(&syspbuff,1,%str(,())); %if (%index(%quote(%upcase(%sysfunc(compress(%quote(&_nobsdataname_))))),INDATA=)) or (%index(%quote(%upcase(%sysfunc(compress(%quote(&_nobsdataname_))))),DATA=)) %then %do; %let _nobsdataname_=%qscan(&_nobsdataname_,2,%str(=)); %end; %let _nobsdsid_=%sysfunc(open(&_nobsdataname_)); %if &_nobsdsid_ %then %do; %let any=%sysfunc (attrn(&_nobsdsid_, ANY)); %if any>=1 %then %do; %let _nobsnobs_=%sysfunc(attrn(&_nobsdsid_,NOBS)); %let _nobsrcs_=%sysfunc(close(&_nobsdsid_)); %if (not (%index(%quote(%upcase(%sysfunc(compress(%quote(&syspbuff))))),%str(LOG=F))) and %index(%upcase(&return),LOG)) or (not (%index(%quote(%upcase(%sysfunc(compress(%quote(&syspbuff))))),%str(LOG=F))) and %index(%upcase(&return),F)) or (%index(%upcase(&return),BOTH)) %then %do; %put --> Note: There are &_nobsnobs_ observations in dataset %data(&_nobsdataname_).; %end; %end; %else %do; %let _nobsnobs_=0; %if (not (%index(%quote(%upcase(%sysfunc(compress(%quote(&syspbuff))))),%str(LOG=F))) and %index(%upcase(&return),LOG)) or (not (%index(%quote(%upcase(%sysfunc(compress(%quote(&syspbuff))))),%str(LOG=F))) and %index(%upcase(&return),F)) or (%index(%upcase(&return),BOTH)) %then %do; %put ==> Alert! There is no observation in the data set %data(&_nobsdataname_).; %end; %end; %end; %else %do; %let _nobsnobs_=.; %if (not (%index(%quote(%upcase(%sysfunc(compress(%quote(&syspbuff))))),%str(LOG=F))) and %index(%upcase(&return),LOG)) or (not (%index(%quote(%upcase(%sysfunc(compress(%quote(&syspbuff))))),%str(LOG=F))) and %index(%upcase(&return),F)) or (%index(%upcase(&return),BOTH)) %then %do; %put ==> Alert! Open for data set %data(&_nobsdataname_) failed.; %end; %end; %if (%index(%upcase(&return),T)) or (%index(%quote(%upcase(%sysfunc(compress(%quote(&syspbuff))))),%str(OUTPUT=T))) or (%index(%quote(%upcase(%sysfunc(compress(%quote(&syspbuff))))),%str(LOG=F))) or (%index(%upcase(&return),OUTPUT)) or (%index(%upcase(&return),BOTH)) %then %do; &_nobsnobs_ %end; %mend nobs;